﻿using System;

namespace _041_重载和解析
{
    class Program
    {
        public class Asset { }
        public class House : Asset { }
        // 继承对方法的重载有特殊的影响。看下面的两个重载
        static void Foo(Asset a) { Console.WriteLine("Foo(Asset)"); }
        static void Foo(House h) { Console.WriteLine("Foo(House)"); }
        static void Main(string[] args)
        {
            // 当重载被调用时，类型最明确的优先匹配：
            House h = new House();
            Foo(h); // 调用Foo(House)

            // 具体调用哪个重载是静态决定（编译时）而不是在运行时决定。
            // 下面代码调用Foo(Asset)，尽管a在运行时是House类型的：
            Asset a = new House();
            Foo(a); // 调用Foo(Asset)

            Console.ReadKey();
        }
    }
}
